unsigned long len = Base64EncodeBufferSize(str->len);
if (len + 2 > out_size) {
- // linefeed and final zero
- return 0;
+ // linefeed and final zero : signal we need more space
+ return len + 2;
}
if (Base64Encode((unsigned char *)str->ptr, str->len, (uint8_t *)out, &len) != SC_BASE64_OK)
return 0;
char output_string[1024] = "";
int size = FormatterFunc(h->data, output_string, sizeof(output_string));
if (size > 0) {
- if (OutputterFunc(output_ctx, (const uint8_t *)output_string, size) < 0) {
+ if (size > 1024) {
+ // we did not provide enough space on the stack, let's allocate on the heap
+ char *out_alloc = SCCalloc(1, size);
+ if (out_alloc == NULL) {
+ err = true;
+ break;
+ }
+ size = FormatterFunc(h->data, out_alloc, size);
+ if (size == 0) {
+ err = true;
+ SCFree(out_alloc);
+ break;
+ }
+ if (OutputterFunc(output_ctx, (const uint8_t *)out_alloc, size) < 0) {
+ err = true;
+ SCFree(out_alloc);
+ break;
+ }
+ SCFree(out_alloc);
+ } else if (OutputterFunc(output_ctx, (const uint8_t *)output_string, size) < 0) {
err = true;
break;
}